package com.sugon.service;

import com.sugon.entity.SysRoleEntity;
import com.sugon.entity.SysUserEntity;
import com.sugon.utils.ProcessInfoEnum;

import java.util.List;
import java.util.Map;


/**
 * 用户与角色对应关系
 *
 * @author lipengjun
 * @date 2017年11月18日 下午13:13:23
 */
public interface SysUserRoleService {

    void saveOrUpdate(String userId, List<String> roleIdList);

    /**
     * 根据用户ID，获取角色ID列表
     */
    List<String> queryRoleIdList(String userId);

    void delete(String userId);

    /**
     * 查询指定部门下具有指定角色的用户列表
     * 首先尝试从指定部门下进行查询
     * 如果用户不存在，则返回指定角色的用户列表
     *
     * @param deptId 部门ID
     * @param roleId 角色ID
     * @return
     */
    List<SysUserEntity> queryDeptRoleUserList(String deptId, String roleId);

    /**
     * 查询指定部门下 指定角色用户列表
     *
     * @param deptId 部门ID
     * @param roleId 角色ID列表
     * @return
     */
    List<SysUserEntity> queryDeptUserByRoleId(String deptId, String... roleId);

    /**
     * 查询角色用户列表
     *
     * @param roleList 角色列表
     * @return 返回指定角色的所有用户
     */
    List<SysUserEntity> queryRoleUserList(List<SysRoleEntity> roleList);

    /**
     * 查询指定部门下具有指定菜单访问权限的用户ID列表
     * 首先尝试从指定部门下进行查询
     * 如果用户不存在，则返回指定角色的用户列表
     *
     * @param deptId
     * @param menuId
     * @return
     */
    List<Map<String, Object>> queryDeptMenuUserList(String deptId, String menuId);

    /**
     * 找出用户用来处理某个事情的角色名称
     *
     * @param processItem 事项
     * @param userId      用户ID
     * @return
     */
    List<String> queryRoleNamesByProcessItem(ProcessInfoEnum processItem, String userId);

}
